"""
预备知识：python执行系统命令模块（subprocess）、IP地址处理模块（IPy）
输入内容：要检查的网段、子网掩码 (输入：192.168.0.0/24)
输出示例： 192.168.0.1已被使用
将输出结果放到文件
将可能存在异常的地方需要做相应处理
"""
import IPy
# import subprocess
from pythonping import ping


# def check_alive(ip1: str) -> None:
# 指定的命令将通过shell执行 将stdout信息传给subprocess.PIPE，不要把其信息输出
# result = subprocess.call('ping  %s' % ip1, stdout=subprocess.PIPE, shell=True)
# with open('reply.txt', 'a', encoding='utf-8') as f:
#     if not result:
#         f.write(f"{ip1}已被使用" + '\n')
#         print(f"{ip1}已被使用")
#     else:
#         f.write(f"{ip1}没有ping通" + '\n')
#         print(f"{ip1}没有ping通")
def check_alive(ip1: str) -> None:
    message = ping(ip1)
    success_ping = "Reply"
    with open('reply.txt', 'a', encoding='utf-8') as f:
        if success_ping in str(message):
            f.write(f"{ip1}已被使用" + '\n')
            print(f"{ip1}已被使用")
        else:
            f.write(f"{ip1}没有ping通" + '\n')
            print(f"{ip1}没有ping通")


while True:
    ip = input("请输入要检查的网段、子网掩码，请输入的格式如（192.168.1.0/24):")
    if ip == 'q':
        break
    try:
        # 通过指定的网段输出该网段所有的IP地址清单
        ip = IPy.IP(ip)
        ip = list(ip)
        ip.remove(ip[0])
        ip.remove(ip[-1])
        for i in ip:
            check_alive(str(i))
    except Exception as ex:
        print("你输的网段格式不对,请输入的格式如（192.168.1.0/24)", ex)
